Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_archives_api_robustness.py

Displaying Raw • Download


tests/backend/test_archives_api_robustness.py d64cd6baac9d816b92712e15c404615577af4b10 (d64cd6ba) Text, 5.04 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""Robustness tests for REST handlers (archives, bundled docs, lxmf send) and related WS paths."""

Tff7b72import T7ee787json
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3AsyncMockTb4b4b4, Te6edf3MagicMock

Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st


Tff7b72def Td2a8ff_handlerTb4b4b4(Te6edf3appTb4b4b4, Te6edf3methodTb4b4b4: Tffa657strTb4b4b4, Te6edf3pathTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3route Tff7b72in Te6edf3appTff7b72.Td2a8ffget_routesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3routeTff7b72.Td2a8ffmethod Tff7b72== Te6edf3method Tff7b72and Te6edf3routeTff7b72.Td2a8ffpath Tff7b72== Te6edf3pathTb4b4b4:
Tff7b72return Te6edf3routeTff7b72.Td2a8ffhandler
Tff7b72return Tff7b72None


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_get_archives_returns_json_for_edge_case_queriesTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/nomadnet/archivesTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None

Te6edf3edge_queries Tff7b72= Tb4b4b4[
Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff100Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Ta5d6ff"Tffd700%00%Ta5d6ff3CscriptTffd700%3ETa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnot-a-numberTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnot-a-numberTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff-5Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff99999Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4]
Tff7b72for Te6edf3query Tff7b72in Te6edf3edge_queriesTb4b4b4:
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffquery Tff7b72= Te6edf3query
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3payload Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffarchivesTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657listTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffpaginationTa5d6ff" Tff7b72in Te6edf3payload


Tf0883e@settingsTb4b4b4(
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3qTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff800Tb4b4b4)Tb4b4b4,
Te6edf3pageTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=Tff7b72-T79c0ff1000Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff10Tff7b72*Tff7b72*T79c0ff9Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff40Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3limitTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=Tff7b72-T79c0ff1000Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff10Tff7b72*Tff7b72*T79c0ff9Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff40Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_get_archives_query_fuzzTb4b4b4(Te6edf3mock_appTb4b4b4, Te6edf3qTb4b4b4, Te6edf3pageTb4b4b4, Te6edf3limitTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/nomadnet/archivesTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None

Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffquery Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Te6edf3qTb4b4b4,
Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3pageTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3limitTb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3payload Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffarchivesTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657listTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffpaginationTa5d6ff" Tff7b72in Te6edf3payload


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_delete_archives_requires_nonempty_idsTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffDELETETa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/nomadnet/archivesTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None

Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffjson Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffidsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_meshchatx_docs_content_requires_pathTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/meshchatx-docs/contentTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffquery Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400


Tf0883e@settingsTb4b4b4(
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3pathTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff600Tb4b4b4)Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_meshchatx_docs_content_path_fuzzTb4b4b4(Te6edf3mock_appTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/meshchatx-docs/contentTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffquery Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4: Te6edf3pathTb4b4b4}
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72in Tb4b4b4(T79c0ff200Tb4b4b4, T79c0ff404Tb4b4b4)
Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_lxmf_messages_send_requires_lxmf_messageTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/lxmf-messages/sendTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffjson Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Tb4b4b4{Tb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_lxmf_messages_send_requires_destination_and_contentTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/lxmf-messages/sendTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffjson Tff7b72= Te6edf3AsyncMockTb4b4b4(
Te6edf3return_valueTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fflxmf_messageTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Tb4b4b4{Tb4b4b4}Tb4b4b4}Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_lxmf_messages_send_rejects_bad_image_fieldTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/api/v1/lxmf-messages/sendTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffjson Tff7b72= Te6edf3AsyncMockTb4b4b4(
Te6edf3return_valueTff7b72=Tb4b4b4{
Ta5d6ff"Ta5d6fflxmf_messageTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaaTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffimageTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffimage_typeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimage_bytesTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff@@@not-base64@@@Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_nomadnet_file_download_invalid_hex_does_not_raiseTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Tff7b72await Te6edf3mock_appTff7b72.Td2a8ffon_websocket_data_receivedTb4b4b4(
Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnomadnet.file.downloadTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnomadnet_file_downloadTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffggTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/file/x.txtTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────